package com.base.array;

import java.util.Arrays;
import java.util.Random;

/**
 *
 * 384. 打乱数组
 * 给你一个整数数组 nums ，设计算法来打乱一个没有重复元素的数组。
 *
 * 实现 Solution class:
 *
 * Solution(int[] nums) 使用整数数组 nums 初始化对象
 * int[] reset() 重设数组到它的初始状态并返回
 * int[] shuffle() 返回数组随机打乱后的结果
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/shuffle-an-array
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @author leon
 * @date 2021年11月22日 12:54
 */
public class RandomArray {
    private int[] origin;
    private int[] now;
    public RandomArray(int[] nums) {
        origin=nums;
        now=nums.clone();
    }
    public int[] reset(){
        now = origin.clone();
        return now;
    }
    /**
    从后向前遍历，[length-1,0]
     1`n与前面[n-1,0]中的任何一个值交换位置
     2·n从length-1到1不断执行1步
     */
    public int[] shuffle(){
        Random random = new Random();
        for (int i = now.length-1; i >0 ; i--) {
            int r = random.nextInt(i);
            int tmp = now[r];
            now[r] = now[i];
            now[i] = tmp;
        }
        return now;
    }

    public static void main(String[] args) {
        RandomArray randomArray = new RandomArray(new int[]{1, 2, 3, 4, 5});
        randomArray.shuffle();
    }
}
